home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / kcl / akcl / kcl.lha / ustation / mktrans < prev    next >
Text File  |  1986-01-17  |  2KB  |  95 lines

  1. #
  2. set htabsiz = 2001
  3.  
  4. cat /usr1/kcl/h/*.h /usr1/kcl/c/*.c others | extract | sort -u \
  5.     | mkhtab ${htabsiz} > trans.c
  6.  
  7. cat >> trans.c <<EOF
  8.  
  9. #include <stdio.h>
  10. #include <ctype.h>
  11. #include "hash.c"
  12.  
  13. char buffer[1024];
  14.  
  15. main()
  16. {
  17.     register c, i, s;
  18.  
  19. START:
  20.     c = getchar();
  21. START1:
  22.     if (feof(stdin))
  23.         goto EXIT;
  24.     if (isalpha(c) || c == '_')
  25.         goto IDENTIFIER;
  26.     if (c == '\'')
  27.         goto CHARACTER;
  28.     if (c == '"')
  29.         goto STRING;
  30.     if (c == '/') {
  31.         putchar(c);
  32.         if ((c = getchar()) == '*')
  33.             goto COMMENT;
  34.         goto START1;
  35.     }
  36.     putchar(c);
  37.     goto START;
  38.  
  39. IDENTIFIER:
  40.     for (i = 0;  isalnum(c) || c == '_';  c = getchar(), i++)
  41.         buffer[i] = c;
  42.     buffer[i] = '\0';
  43.     if (i < 7) {
  44.         printf("%s", buffer);
  45.         goto START1;
  46.     }
  47.     for (s = hash(buffer, ${htabsiz});
  48.          htab[s].h_key != NULL;
  49.          s = (s+1) % ${htabsiz})
  50.         if (strcmp(htab[s].h_key, buffer) == 0) {
  51.             printf("%s", htab[s].h_val);
  52.             goto START1;
  53.         }
  54.     printf("%s", buffer);
  55.     goto START1;
  56.  
  57. CHARACTER:
  58.     putchar(c);
  59.     while ((c = putchar(getchar())) != '\\'')
  60.         if (c == '\\\\')
  61.             putchar(getchar());
  62.     goto START;
  63.  
  64. STRING:
  65.     putchar(c);
  66.     while ((c = putchar(getchar())) != '"')
  67.         if (c == '\\\\')
  68.             putchar(getchar());
  69.     goto START;
  70.  
  71. COMMENT:
  72.     putchar(c);
  73.     while (putchar(getchar()) != '*' || putchar(getchar()) != '/')
  74.         ;
  75.     goto START;
  76.  
  77. EXIT:
  78.     exit(0);
  79. }
  80. EOF
  81.  
  82. ed trans.c <<EOF
  83. 1,\$g/{"continue"/s/.*/{"continue", "continue"},/p
  84. 1,\$g/{"default"/s/.*/{"default", "default"},/p
  85. 1,\$g/{"extern"/s/.*/{"extern", "extern"},/p
  86. 1,\$g/{"register"/s/.*/{"register", "register"},/p
  87. 1,\$g/{"typedef"/s/.*/{"typedef", "typedef"},/p
  88. 1,\$g/{"unsigned"/s/.*/{"unsigned", "unsigned"},/p
  89. 1,\$g/{"isalpha"/s/.*/{"isalpha", "isalpha"},/p
  90. w
  91. q
  92. EOF
  93.  
  94. cc -o trans trans.c
  95.